import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

import javax.swing.JOptionPane;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

/**
 * Programme principal
 * 
 * @author H4201
 * 
 */
public class main {

	/**
	 * Socket pour la communication entre Windows et Linux
	 */
	private Socket socket;

	/**
	 * Constructeur du main. Crée le controleur principal, qui se charge de
	 * l'initialisation réseau. Crée ensuite le socket. Si la communication
	 * échoue, ferme le programme. Sinon, crée les threads d'envoie et de
	 * réception, puis la fenêtre d'initialisation. Attends la fin des deux
	 * threads, ferme les fenêtres et ferme l'application.
	 */
	public main() {

		ControleurFenetrePrincipale ctrl = new ControleurFenetrePrincipale();

		try {
			socket = new Socket(ctrl.getIp(), ctrl.getPort());
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			JOptionPane.showMessageDialog(null, "Connexion refusée.",
					"Erreur de connexion", JOptionPane.ERROR_MESSAGE);
			ctrl.finAppli();
			return;
		}

		WindowsReception winRecep = new WindowsReception(ctrl, socket);
		WindowsEnvoi winEnvoi = new WindowsEnvoi(ctrl, socket);

		new FenetreInit(ctrl);

		winRecep.start();
		winEnvoi.start();

		while (winEnvoi.isAlive() || winRecep.isAlive()) {
			try {
				Thread.sleep(1000);
			} catch (InterruptedException ex) {
			}
		}
		ctrl.finAppli();
	}

	public static void main(final String[] args) throws UnknownHostException,
			IOException {

		try {
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (UnsupportedLookAndFeelException e) {
			e.printStackTrace();
		}
		new main();
	}

}
